Skip to content

Keep project active through post-build telemetry - #14679

Merged
AR-May merged 10 commits into
dotnet:mainfrom
AR-May:fix-telemetry-active-build-guard
Aug 13, 2026
Merged

AR-May merged 10 commits into
dotnet:mainfrom
AR-May:fix-telemetry-active-build-guard

Conversation

@AR-May

@AR-May AR-May commented Aug 10, 2026

Copy link
Copy Markdown
Member

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Context

Under memory pressure, MSBuild serializes inactive project configurations to disk to reduce memory use.  CacheIfPossible()  previously considered a configuration safe to cache once it had no actively executing targets.

In multithreaded mode, multiple request engines run in the same process and share the configuration cache. After a project's last target completed, another request engine could sweep the configuration while the original request was still executing post-build telemetry.  UpdateStatisticsPostBuild()  then accessed  RequestConfiguration.Project , which fails when the configuration is cached:

 MSB0001: Internal MSBuild Error: We shouldn't be accessing the ProjectInstance when the configuration is cached.

Traditional multiprocess builds do not normally expose this race because each worker process owns a separate configuration cache, and its memory sweep does not run concurrently in the middle of that request's  BuildProject()  execution.

Changes Made

Add a scoped  ProjectInstance  usage counter to  BuildRequestConfiguration :

  • Entering the scope retrieves the project if it was previously cached and increments the usage count under the configuration lock.
  •  CacheIfPossible()  skips configurations with active project usage.
  • Disposing the scope decrements the count under the same lock.
  • The counter supports nested or overlapping usage.

 BuildProject()  holds this scope for its full lifetime, ensuring the project remains available through post-build telemetry.

Why protect the whole  BuildProject()  operation?

A narrower set of scopes would leave short intervals where an MT cache sweep could serialize the project, only for the next scope to immediately retrieve it. Protecting the complete operation avoids that unnecessary disk churn.

The memory-retention impact is limited:

  • In MT mode, the potentially long cross-node results-transfer wait is skipped because all thread nodes share the same results cache.
  • Target execution already sets  IsCacheable = false , so the long-running portion of  BuildProject()  was already protected from caching.
  • In non-MT mode, another request engine cannot concurrently sweep this configuration: other workers have separate caches, and the current engine processes its completion-triggered sweep only after  BuildProject()  returns. The scope therefore changes no practical caching behavior there beyond small lock/counter overhead.

Testing

Added unit test ProjectInstanceUsagePreventsConfigurationCaching. Unfortunately can not create a deterministic regression test for the error.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: bd117dd2-4173-4f41-8d99-21ef024bf8ad
@AR-May

AR-May commented Aug 10, 2026

Copy link
Copy Markdown
Member Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@AR-May

AR-May commented Aug 10, 2026

Copy link
Copy Markdown
Member Author

Validation of the caching guard

Setup

  • Repo under test: dotnet/msbuild itself (MSBuild.slnx) — this is what reproduced the failure.
  • A/B isolated to this change only: baseline = parent e45cc3de8a, patched = cf54e451a5. Both built as bootstrap SDKs and copied outside artifacts/, so the engine under test isn't overwritten by the build it is running.
  • Repro command:
$env:MSBUILDDEBUGFORCECACHING='1'
dotnet build MSBuild.slnx --no-restore -mt -v:q
  • Each iteration is cold: dotnet build-server shutdown, kill leftover nodes, wipe artifacts/, restore, then build.

Results

Engine Cold-clean crashes
Baseline (no fix) 2 / 6
Patched 0 / 6

Unpatched engines also failed in ad-hoc runs (stock SDK engine: 4x MSB0001). The patched engine did not fail in any run (~9 total) and completed with 0 errors on the same cycles where baseline died.

Observed failure — note this is a different call site than the one originally reported:

BuildRequestConfiguration.get_Project()
  <- ProjectLoggingContext.CreateLoggingContext
  <- RequestBuilder.HandleProjectStarted
  <- RequestBuilder.BuildProject()

Both this and UpdateStatisticsPostBuild sit inside the new scope (RequestBuilder.cs:1146), which is consistent with the fix addressing them.

@AR-May
AR-May marked this pull request as ready for review August 10, 2026 15:37
Copilot AI lite review requested due to automatic review settings August 10, 2026 15:37

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses a multithreaded race where a BuildRequestConfiguration can be memory-pressure cached after the last target finishes, while the original request is still running post-build telemetry that reads RequestConfiguration.Project, causing an internal error. It introduces a scoped ProjectInstance usage counter on the configuration and holds that scope for the full lifetime of RequestBuilder.BuildProject() so the configuration cannot be cached mid-operation.

Changes:

  • Add a scoped ProjectInstance usage counter (AcquireProjectInstanceUsage) to keep a configuration’s ProjectInstance in-memory and block CacheIfPossible() while in use.
  • Hold that scope for the entire RequestBuilder.BuildProject() execution to cover post-build telemetry.
  • Add a unit test validating that active usage prevents configuration caching (including nested usage).

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
src/Build/BackEnd/Shared/BuildRequestConfiguration.cs Adds a usage-scoped counter and updates CacheIfPossible() to skip caching while the project instance is actively in use.
src/Build/BackEnd/Components/RequestBuilder/RequestBuilder.cs Acquires the new usage scope for the full BuildProject() lifetime to prevent caching during post-build telemetry.
src/Build.UnitTests/BackEnd/BuildRequestConfiguration_Tests.cs Adds a unit test ensuring active project usage blocks configuration caching (including nested usage).

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

@ViktorHofer

Copy link
Copy Markdown
Member

Code review

Verdict: approve-with-comments. The core fix is correct — the increment (BuildRequestConfiguration.cs:669) and the guard read (:769) both happen under _syncLock, so there's no residual TOCTOU, and the using declaration releases on every exception path out of BuildProject including BuildAbortedException. I built the branch and ran BuildRequestConfiguration_Tests (43/43 pass).

The race being fixed, for the record:

T=0  RequestBuilder thread : _targetBuilder.BuildTargets(...) returns.
                             TargetBuilder.cs:207 restored IsCacheable = true,
                             TargetBuilder.cs:530 removed the last ActivelyBuildingTargets entry.
T=1  BuildRequestEngine thr: another request completes -> EvaluateRequestStates
                             -> CheckMemoryUsage -> ConfigCache.WriteConfigurationsToDisk
                             -> CacheIfPossible(): guard passes, _project.Cache() nulls
                                _globalProperties/_properties/_items, IsCached = true.
T=2  RequestBuilder thread : UpdateStatisticsPostBuild() reads RequestConfiguration.Project
                             -> Assumed.False(IsCached) -> InternalErrorException, build dies.

Worth calling out in the commit message: hoisting the retrieval to the top of BuildProject also fixes a latent InternalErrorException at RequestBuilder.cs:1185, where the SDK-resolved-environment-variable block read .Project before the old RetrieveFromCache() call site.

Major

M1 — The same root-cause race remains at three sibling call sites, and one documents an invariant this PR disproves.
ProjectCacheService.cs:844-850, ProjectCacheService.cs:494-500, BuildRequestEngine.cs:386-393

HandleProjectFinishedAsync does the identical check-then-act:

if (requestConfiguration.IsCached) { requestConfiguration.RetrieveFromCache(); }
// <-- sweep thread can CacheIfPossible() here
List<ProjectCacheDescriptor> d = GetProjectCacheDescriptors(requestConfiguration.Project).ToList();

Same T=1/T=2 interleaving — this runs post-build, so IsActivelyBuilding is false and IsCacheable has been restored. ShouldUseCache (:494) has the same shape. And BuildRequestEngine.cs:386-388 carries a comment asserting that config.RetrieveFromCache(); ... resultToReport.ProjectStateAfterBuild = config.Project; is safe "since only one thread can run in the BuildRequestEngine at a time" — exactly the invariant this PR contradicts, given the shared ConfigCache singleton.

Suggest applying using var _ = config.AcquireProjectInstanceUsage(); at those sites — that's what the new primitive is for. If that's out of scope here, please file a follow-up, reference it from the new comment at RequestBuilder.cs:1146, and correct the now-false safety comment at BuildRequestEngine.cs:386-388 so the next reader doesn't rely on it.

M2 — No regression test for the bug that was actually fixed.
BuildRequestConfiguration_Tests.cs:675-729

The new test covers the primitive well, but nothing covers the fix: delete the using at RequestBuilder.cs:1149 and the whole suite still passes. MSBUILDDEBUGFORCECACHING=1 (BuildRequestEngine.cs:153, consumed at :927) makes an engine-level test feasible — forced caching drives WriteConfigurationsToDisk on the engine thread while request builders are in their post-target tail.

Also, inside the scope the test only asserts IsCached.ShouldBeFalse() — the flag, not the state that matters. The neighbouring test at :421-424 proves CacheIfPossible nulls the instance collections, so:

using (configuration.AcquireProjectInstanceUsage())
{
    configuration.IsCached.ShouldBeFalse();
    instance.PropertiesToBuildWith.ShouldNotBeNull();   // the invariant telemetry depends on
    instance.ItemsToBuildWith.ShouldNotBeNull();

Minor

m1 — A leaked usage count is unrecoverable. BuildRequestConfiguration.cs:131, BuildManager.cs:2521-2528

End-of-build cleanup deliberately clears the analogous transient state (config.ActivelyBuildingTargets.Clear()), but _projectInstanceUsageCount is never reset. Concrete path: WaitForCancelCompletion (RequestBuilder.cs:290-310) times out on a hung task, throws UnableToCancel, and abandons the request thread — the using never runs. In VS, ClearNonExplicitlyLoadedConfigurations keeps ExplicitlyLoaded configurations across builds, so that ProjectInstance can never be evicted again for the life of devenv.exe. Suggest an internal void ResetProjectInstanceUsage() called alongside the ActivelyBuildingTargets.Clear() loop.

m2 — Acquisition can throw before any project logging context exists. RequestBuilder.cs:1149-1150

The scope constructor does disk I/O (RetrieveFromCache → File.OpenRead, converting DirectoryNotFoundException/UnauthorizedAccessException into CacheFileInaccessible). That call previously sat after HandleProjectStarted, so failures were attributed to the project; now it precedes _projectLoggingContext = null; and ProjectFirstEncountered, so a failure logs as UnhandledMSBuildError on the node context with no ProjectStarted/Finished pair in the binlog and no EndProjectRequest on the BuildCheck manager. Rare (AV or temp cleanup deleting Configuration{id}.cache), but a diagnostics regression. Either move the null assignment above the acquisition and wrap it in the same catch that builds the temporary ProjectLoggingContext (~:1198-1207), or say in the comment that node-level reporting is intentional here.

m3 — The comment is narrower than the bug. RequestBuilder.cs:1146-1148

"MT request engines share the configuration cache."

The race isn't MT-specific: in classic single-process mode the sweep already runs on the BuildRequestEngine thread while RequestBuilder runs on s_dedicatedScheduler, against the same ConfigCache singleton. This matters beyond wording — it determines whether this is a servicing/backport candidate. Suggested:

// The configuration cache is shared across the node and swept for memory pressure on the
// BuildRequestEngine thread (CheckMemoryUsage -> ConfigCache.WriteConfigurationsToDisk).
// A configuration becomes cacheable again as soon as its last target completes, but post-build
// telemetry still reads its ProjectInstance. Pin the project for the whole operation. See #<issue>.

Nits

  • BuildRequestConfiguration.cs:657-681 — ProjectInstanceUsageScope is a readonly struct with a side-effecting constructor; a copy underflows the counter and default(...) throws ArgumentNullException from lock (null). The pattern has repo precedent (ProjectRootElementCache.ReentrancyGuard, FileAccessManager.HandlerRegistration) so it's fine, but consider making the constructor private (the nested type can still be constructed from AcquireProjectInstanceUsage) and adding an Assumed.NotNull(_configuration, ...) at the top of Dispose.
  • BuildRequestConfiguration_Tests.cs:679 — suggest CacheIfPossible_WhileProjectInstanceUsageIsHeld_DoesNotCache to match MethodUnderTest_Scenario_ExpectedResult.
  • BuildRequestConfiguration_Tests.cs:702-728 — the class already has _env; _env.WithTransientTestState(...) could carry the ClearCacheFile() cleanup and own the ProjectCollection instead of the manual try/finally.
  • BuildRequestConfiguration_Tests.cs:714 — prefer public async Task + await Task.Run(configuration.CacheIfPossible) over .GetAwaiter().GetResult().
  • BuildRequestConfiguration.cs:645-651 — the pin is per-configuration, but ShallowCloneWithNewId (:1079) hands two configuration objects the same _project with independent locks and counters. Benign today (the source is discarded and never cached), but worth a sentence in the doc comment so nobody later assumes the pin protects the ProjectInstance itself.
  • Please reword commit cf3f8b5 ("Refactor") when squashing.

Notes on the areas I looked at specifically

Lifetime/refcount — lock is recursive so the nested RetrieveFromCache() is fine; the increment is placed after the Assumed.False(IsCached) check, so a failed acquisition can't leak a count; lock ordering is unchanged (only CacheIfPossible takes _syncLock → _project). Nested/re-entrant requests on the same configuration each take their own count, so the refcount rather than a bool is the right call. _projectInstanceUsageCount is correctly not translated in Translate — node-local transient state must start at 0 on the receiving node.

Memory — negligible impact. During TargetBuilder.BuildTargets the configuration is already unpinnable (IsCacheable forced false at TargetBuilder.cs:133, restored at :207; and while blocked on child requests the target is still in ActivelyBuildingTargets). The newly-pinned windows are project load/evaluation and the post-target telemetry tail, where the instance is in active use anyway. The only genuinely new window is the results-transfer block at RequestBuilder.cs:1247-1256 (non-MT multi-node), which is brief. Peak memory in large builds should be unchanged.

ChangeWave — not warranted, and I'd argue against one: no new or changed diagnostics, no property defaults, no CLI surface, no output-format change. The only observable delta is that a configuration isn't evicted during a sub-second window in which eviction was never safe. Gating a crash fix behind opt-in would leave the InternalErrorException on by default. Do consider servicing/backport though — see m3, since the MT framing affects that call.

Perf — clean. The struct scope avoids an allocation and doesn't box (consumed as a concrete-typed using local). Cost is one uncontended Monitor.Enter/Exit pair per project build plus an int comparison in CacheIfPossible, correctly ordered cheapest-first. No LINQ or string formatting added to a hot path.

Test cleanup — the finally + ClearCacheFile() at :727 is reliable, and the only other test writing Configuration1.cache (:420) is in the same class, so xUnit collection serialization prevents a collision. No cross-test leakage.

@AR-May AR-May self-assigned this Aug 11, 2026
AR-May added 4 commits August 12, 2026 14:45
Hold ProjectInstance usage scopes while project cache and results-transfer paths access configuration project state.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0676fd4d-7cfb-4f3a-8acd-1e68b7d9f1c5
Create a temporary project logging context when acquiring the ProjectInstance usage scope fails, while retaining the scope for the full build operation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0676fd4d-7cfb-4f3a-8acd-1e68b7d9f1c5
Describe the node-wide configuration cache and BuildRequestEngine memory-pressure sweep without implying the race is MT-specific.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0676fd4d-7cfb-4f3a-8acd-1e68b7d9f1c5
Document per-configuration ownership, diagnose default scope disposal, and modernize the cache-prevention test with async execution and TestEnvironment cleanup.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0676fd4d-7cfb-4f3a-8acd-1e68b7d9f1c5
@AR-May

AR-May commented Aug 12, 2026

Copy link
Copy Markdown
Member Author

M1: fixed!

M2: I already noted in the PR description that I can not create a deterministic regression test for the error.

m1: I don’t think we should reset the usage count during end-of-build cleanup. A cancellation timeout does not terminate the request task, so the task may still resume and access the ProjectInstance. Its active scope therefore remains valid and correctly tracked. Resetting the count in this case actually can corrupt tracking across builds: a new operation could increment the reset counter, then the old operation could resume and decrement it, leaving the count at zero while the new operation is still active. That would allow the project to be cached while in use -> bug.

In fact I think that defensive config.ActivelyBuildingTargets.Clear() might lead to bug with server! Example:

  1. Old request records target Build .
  2. Cleanup clears ActivelyBuildingTargets .
  3. A new request records its own Build  target.
  4. The old request resumes and executes Remove("Build") .
  5. It accidentally removes the new request’s entry.

m2: fixed!

nits mostly accepted for fixing.

@ViktorHofer

Copy link
Copy Markdown
Member

Follow-up review

Verdict: approve-with-comments. M1, m2 and m3 are properly fixed and the fixes are themselves correct. On m1 you're right and I withdraw it — with stronger evidence than either of us cited. On M2 I have to hold the line: a deterministic engine-level regression test is feasible, and I built and ran one to prove it. Two new findings, one major.

Re-ran BuildRequestConfiguration_Tests: 43/43 pass.

Status of every prior item

# Item Status
M1 Same race at three sibling .Project sites ✅ Fixed — all three, correctly
M2a No regression test for the actual bug ❌ Disputed → I hold the line. Deterministic test proven feasible (built + ran)
M2b New test asserts the flag, not the state ❌ Not addressed in commits 3–7
m1 Leaked usage count is unrecoverable 🔵 Disputed → I concede. Withdrawn.
m1′ Your claim that ActivelyBuildingTargets.Clear() is itself a latent bug ✅ Credible — please file separately
m2 Acquisition can throw before any project logging context exists ✅ Fixed, binlog/BuildCheck pairing intact
m3 Comment narrower than the bug ✅ Comment fixed — but my re-assessment reverses the servicing answer
nit 1 readonly struct ctor/default hazards 🟡 Partial — Assumed.NotNull added in Dispose (BuildRequestConfiguration.cs:679); ctor still internal (:665)
nit 2 Test naming convention ✅ Fixed
nit 3 Use _env / WithTransientTestState ✅ Fixed
nit 4 async Task + await Task.Run ✅ Fixed
nit 5 Document ShallowCloneWithNewId sharing ✅ Fixed (BuildRequestConfiguration.cs:649-653)
nit 6 Commit titled "Refactor" ⏳ Open — squash-time cleanup

M1 — verified fixed

All three sites now hold the scope across the whole .Project use, with no leaked counts and no new lock-ordering edge:

  • ProjectCacheService.cs:493-498 — using declaration; GetProjectCacheDescriptors(...).Any() forces the lazy enumerable inside the scope. Correct.
  • ProjectCacheService.cs:840-845 — good catch restructuring to .ToList() inside a using block rather than letting a lazy enumerable escape the scope.
  • BuildRequestEngine.cs:385-395 — scope covers both .Project and the result preparation; the false comment ("only one thread can run in the BuildRequestEngine at a time") is gone.

Lock ordering unchanged: ShouldUseCache is still called under BuildManager._syncLock, and the config _syncLock was already taken on that path by the old RetrieveFromCache(). No boxing at any of the three sites (using on a statically-typed struct calls Dispose directly).


m1 — you're right, I withdraw it. Here's stronger evidence than either of us had.

Your decrement-underflow argument is correct on its own terms, and Dispose makes it worse than you claimed: Assumed.True(_projectInstanceUsageCount > 0, ...) (BuildRequestConfiguration.cs:683) is not [Conditional("DEBUG")]. So a reset followed by a resumed abandoned scope's Dispose doesn't silently underflow — it throws InternalErrorException on a live build. My suggestion would have converted a benign leak into a crash.

But the decisive point is one neither of us raised: the leak I described already exists, unfixed, in the same code path — and resetting the counter wouldn't even remove the pin.

TargetBuilder.cs:132-133 sets configuration.IsCacheable = false, and the restore at :207 sits after the try/finally, i.e. on the success path only. Any exception out of ProcessTargetStack — including the BuildAbortedException thrown at :187-189 on cancellation — skips it, and BuildManager.Reset() (BuildManager.cs:2521-2526) clears ActivelyBuildingTargets but does not reset IsCacheable. So in your exact WaitForCancelCompletion → UnableToCancel scenario (RequestBuilder.cs:288-311), the configuration is already permanently unpinnable via IsCacheable == false, regardless of _projectInstanceUsageCount.

Which also answers "which failure mode is worse": moot. The spurious-unpin risk you identified is real, and the pin it would relieve is already held by another flag. Do nothing. If you want to close the loop cheaply, a one-line comment on _projectInstanceUsageCount (BuildRequestConfiguration.cs:128-131) noting that the count is intentionally never force-reset — because an abandoned request may still resume and dispose its scope — would save the next reviewer this whole round-trip.

The epoch-stamped-scope alternative isn't worth it: a field per scope and per configuration to fix a leak IsCacheable already causes anyway.

On ActivelyBuildingTargets.Clear() being a latent bug — I agree, and it's worse than your sketch. TargetBuilder.cs:485 writes and :180/:508/:530/:631 remove from a plain Dictionary<string,int>, and Remove(name) is unconditional — it doesn't check the stored GlobalRequestId — so a resumed stale thread removes whatever entry is there. And with Reset() running concurrently with a still-live abandoned thread you have unsynchronized Dictionary mutation, which can corrupt the dictionary outright, not just lose an entry. Real, exotic, and squarely a separate issue — please file it rather than growing this PR.


M2 — holding the line on (a); (b) is still open

(a) A deterministic engine-level regression test is feasible. I wrote one and ran it.

RequestBuilder_Tests already drives the real RequestBuilder.BuildProject() end to end against a MockHost, with a mock target builder (RequestBuilder_Tests.cs:492, TestTargetBuilder) and direct access to the real IConfigCache (:94). That gives a synchronous seam at exactly the T=1 moment of the race: whatever the mock target builder does immediately before returning runs on the RequestBuilder thread, between "last target finished" and UpdateStatisticsPostBuild(). No sleeps, no thread racing, no MSBUILDDEBUGFORCECACHING.

Add a hook to TestTargetBuilder, invoked just before it returns its result (RequestBuilder_Tests.cs:510-552):

[Fact]
public void BuildProject_ConfigurationCacheSweepAfterLastTarget_DoesNotCacheConfiguration()
{
    BuildRequestConfiguration configuration = CreateTestProject(1);
    try
    {
        var targetBuilder = (TestTargetBuilder)_host.GetComponent(BuildComponentType.TargetBuilder);
        var configCache = (IConfigCache)_host.GetComponent(BuildComponentType.ConfigCache);
        configCache.AddConfiguration(configuration);

        BuildRequest request = CreateNewBuildRequest(1, ["target1"]);
        var entry = new BuildRequestEntry(request, configuration, CreateStubTaskEnvironment());
        var result = new BuildResult(request);
        result.AddResultsForTarget("target1", GetEmptySuccessfulTargetResult());
        targetBuilder.SetResultsToReturn(result);

        bool? cachedDuringPostBuild = null;

        // Simulate the BuildRequestEngine memory-pressure sweep landing in the window between the
        // last target finishing and BuildProject() returning.
        targetBuilder.ActionBeforeReturningResult = () =>
        {
            configCache.WriteConfigurationsToDisk();
            cachedDuringPostBuild = configuration.IsCached;
        };

        _requestBuilder.BuildRequest(GetNodeLoggingContext(), entry);
        WaitForEvent(_buildRequestCompletedEvent, "Build Request Completed");

        cachedDuringPostBuild.ShouldBe(false);
        _buildRequestCompleted_Entry.Result.Exception.ShouldBeNull();
        Assert.Equal(BuildResultCode.Success, _buildRequestCompleted_Entry.Result.OverallResult);
    }
    finally
    {
        configuration.ClearCacheFile();
        DeleteTestProject(configuration);
    }
}

Measured, on this branch:

  • With your using at RequestBuilder.cs:1162-1163 in place → passes.
  • With that using removed and the old RetrieveFromCache() restored → fails:
    Shouldly.ShouldAssertException : cachedDuringPostBuild should be False but was True
    

So it's not "non-deterministic and awkward" — it's fully deterministic and about 30 lines. One caveat worth a comment in the test: without the fix this asserts on IsCached, not on an InternalErrorException, because UpdateStatisticsPostBuild() returns early when no telemetry collector is attached. Asserting the state is the right assertion anyway — it's the invariant the PR establishes, and it also covers the HandleProjectStarted → ProjectLoggingContext.CreateLoggingContext → .Project site from your own repro.

I'd like this in the PR. It's the difference between "the mechanism works" and "the caller uses the mechanism", and it's what stops someone deleting that using in six months.

(b) Still open, and independent of (a). BuildRequestConfiguration_Tests.cs:710 asserts only configuration.IsCached.ShouldBeFalse(). The neighbouring test at :417-424 shows what CacheIfPossible actually does — nulls GlobalPropertiesDictionary / ItemsToBuildWith / PropertiesToBuildWith. That's the state post-build telemetry reads. Please add inside the scope:

instance.PropertiesToBuildWith.ShouldNotBeNull();
instance.ItemsToBuildWith.ShouldNotBeNull();

Cheap, and it makes the test fail if the guard is ever reordered relative to the actual _project.Cache() call.


m2 — verified fixed, correctly

AcquireProjectInstanceUsageWithProjectLoggingContext() (RequestBuilder.cs:1316-1327) restores project-scoped diagnostics on the disk-I/O failure path. Verified:

  • CreateTemporaryProjectLoggingContext() (:1329-1336) uses the (nodeLoggingContext, request, projectFullPath, toolsVersion) overload, which passes projectProperties: null, projectItems: null — so it does not touch .Project and cannot throw a second MSB0001 while reporting the first failure. Important, since on this path the configuration is still cached.
  • ProjectStarted/ProjectFinished pair: the ctor logs ProjectStarted, and ReportResultAndCleanUp logs ProjectFinished for any non-null _projectLoggingContext. The error lands via RequestThreadProc's (_projectLoggingContext ?? _nodeLoggingContext).LogError(..., "UnhandledMSBuildError", ...) — now project-scoped.
  • BuildCheck pairing intact: the acquire is before HandleProjectStarted (which calls StartProjectRequest), and the throw exits before the try whose finally calls EndProjectRequest. Neither runs — symmetric.

m3 — comment fixed; my re-assessment reverses the servicing conclusion

RequestBuilder.cs:1158-1161 now reads "The configuration cache is shared across the node and may be swept for memory pressure on a BuildRequestEngine thread" — accurate and no longer MT-only. Good.

But I now believe the specific telemetry crash is effectively MT-only, and I withdraw that half of m3. I tried to build a non-MT interleaving and couldn't:

  • CheckMemoryUsage() only runs from EvaluateRequestStates() when completedEntries.Count > 0 (BuildRequestEngine.cs:832-834).
  • EvaluateRequestStates asserts at most one Active entry per engine (:791, Assumed.Null(activeEntry, "Multiple active requests")), and only an Active entry's RequestBuilder is inside BuildProject().
  • So a non-MT engine needs a Complete entry coexisting with an Active one whose builder happens to be in the post-target window. Completed entries are reaped by EvaluateRequestStates itself, and the engine ActionBlock is FIFO with DOP 1, so the reap-and-sweep action runs before the activation action that would put another request in that window.

With -mt, multiple engines share the one ConfigCache and the assertion is per-engine, so the overlap is trivially reachable — consistent with your A/B (2/6 baseline failures under -mt, 0/9 patched).


New findings

N1 — MAJOR: a fourth sibling site with the identical check-then-act, still unprotected, and this one is not MT-only.
ProjectCacheService.cs:530-540 and :558-573.

530:  EvaluateProjectIfNecessary(cacheRequest.Submission, cacheRequest.Configuration);
534:      cacheRequest.Configuration.Project,          // <- unguarded
538:      evaluationId: cacheRequest.Configuration.Project.EvaluationId,
540:      projectFile: cacheRequest.Configuration.Project.FullPath);
...
560:  lock (configuration)                             // <- NOT _syncLock; a different lock object
572:      configuration.Project.TranslateEntireState = true;

Concrete scenario, no -mt required:

  • PostCacheRequest runs its body on a thread-pool thread (Task.Run, :514).
  • NodeProviderInProc.cs:358 passes the BuildManager's own _componentHost to InProcNode, so the in-proc node's BuildRequestEngine and the BuildManager share one ConfigCache singleton.
  • T=0 pool thread: EvaluateProjectIfNecessary → LoadProjectIntoConfiguration returns; the configuration is now IsLoaded, IsCacheable, not actively building.
  • T=1 engine thread: another request completes → EvaluateRequestStates → CheckMemoryUsage → WriteConfigurationsToDisk → CacheIfPossible(). The new guard at BuildRequestConfiguration.cs:775 passes (count is 0 — nobody acquired), _project.Cache() nulls the collections, IsCached = true.
  • T=2 pool thread: configuration.Project.TranslateEntireState = true (:572) or cacheRequest.Configuration.Project (:534) → Assumed.False(IsCached) → MSB0001: We shouldn't be accessing the ProjectInstance when the configuration is cached.

Note lock (configuration) at :560 locks the configuration object, not _syncLock, so it provides zero mutual exclusion against CacheIfPossible. Reachable on the command line with a global project-cache plugin plus memory pressure; not reachable in devenv.exe, since CheckMemoryUsage early-returns when RunningInVisualStudio.

Pre-existing, so not a regression from this PR — but it's the same root cause you just fixed three instances of, in the same file, and it's the one instance that doesn't need -mt. Recommend wrapping ProcessCacheRequestAsync's prologue in a scope covering :530-540, and replacing lock (configuration) at :560 with an AcquireProjectInstanceUsage() scope around :562-573. If you'd rather not grow the PR, file it — but leave a comment at :534 so it isn't lost.

Related, worth an issue either way: the scopes don't cover consumption of the retrieved instance. BuildRequestEngine.cs:394 hands config.Project to resultToReport.ProjectStateAfterBuild and releases the scope at the end of that block, but the same ProjectInstance object is later serialized on the endpoint write pump, or handed by reference to the BuildManager on an in-proc endpoint. A later sweep calls Cache() on that same object, nulling _globalProperties/_properties/_items in place and gutting a ProjectStateAfterBuild someone else still holds. Same shape at ProjectCacheService.cs:544. Pre-existing; out of scope here.

N2 — MODERATE: the PR description's memory-impact argument doesn't hold for non-MT multi-proc.
RequestBuilder.cs:1243-1251. The description says "In MT mode, the potentially long cross-node results-transfer wait is skipped because all thread nodes share the same results cache" — true, NeedsResultsTransfer returns false in MT. But in non-MT multi-proc it returns true, and await BlockOnTargetInProgress(...) now sits inside the pin. During that wait the configuration has just been evaluated, has no active targets, and IsCacheable is still true — i.e. it's exactly the prime eviction candidate the sweep exists for, and it's now pinned for a full scheduler round trip plus cross-node transfer. Combined with N1's point that the config cache is shared with the BuildManager, this isn't purely theoretical on a worker node under memory pressure.

I'm not asking you to restructure BuildProject; the "avoid disk churn" rationale is sound and the exposure is one configuration. But please either (a) replace that bullet in the description with "the results-transfer wait is a new pin window in non-MT multi-proc; judged acceptable because it's a single configuration and the alternative is a crash", or (b) release and re-acquire around :1243-1251. I'd take (a).

N3 — NIT: BuildRequestEngine.cs:386-387's comment is narrower than the hazard it guards. Align it with the better wording you used at RequestBuilder.cs:1159-1161 ("the configuration cache is shared across the node…") rather than "multiple in-proc request engines".

N4 — NIT: ProjectInstanceUsageScope's ctor (BuildRequestConfiguration.cs:665) is still internal. A nested type can be constructed from a private ctor by its enclosing type, so private costs nothing and closes the "someone constructs one directly and copies it" footgun that the Assumed.NotNull in Dispose only half-closes.

Dimensions re-checked and clean given the new commits: ChangeWave (still not warranted), performance (no allocation or boxing at the three new sites; .Any()/.ToList() forcing inside the scopes is correct and cold-path), string comparison, cross-platform, file I/O, API surface, evaluation model, security, dependencies, build infrastructure. Translation correctly still excludes _projectInstanceUsageCount — node-local transient state must start at 0 on the receiving node.


Servicing / backport

Do not backport. My m3 re-assessment inverts my earlier tentative recommendation: the crash this PR fixes requires two request engines sharing one ConfigCache, which only happens under -mt. -mt is opt-in and not present in servicing branches, so shipping to main only is correct.

The one thing that would have justified servicing — a non-MT-reachable instance of the same race — is N1, and that path is pre-existing, requires a project-cache plugin plus real memory pressure, and is excluded in devenv.exe. Fix it in main; don't service it.

Follow-up issues worth filing: (1) the unprotected .Project accesses in ProjectCacheService (N1); (2) ProjectStateAfterBuild outliving its pin; (3) IsCacheable never restored on the exception path at TargetBuilder.cs:207; (4) your ActivelyBuildingTargets.Clear() concern.

AR-May and others added 3 commits August 13, 2026 10:32
Covers that RequestBuilder holds a ProjectInstance usage scope for the
whole BuildProject operation, so a concurrent memory-pressure sweep of
the configuration cache cannot cache the configuration out from under it.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b48c6f3f-d2af-474b-b74f-0cbac2330a5e
ProcessCacheRequestAsync evaluated the configuration and then read its
ProjectInstance unpinned, handing the live instance to the plugin for the
duration of the cache query. The in-proc node's BuildRequestEngine shares
the BuildManager's configuration cache, so its memory-pressure sweep could
cache the configuration to disk in that window and gut the instance the
plugin was reading. Hold a ProjectInstance usage scope for the whole
operation.

The existing lock on the configuration object does not help here: it is a
different monitor from the one CacheIfPossible takes. Document that it only
serializes the check-then-act on loading the project.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b48c6f3f-d2af-474b-b74f-0cbac2330a5e
CacheIfPossible nulls GlobalPropertiesDictionary, PropertiesToBuildWith and
ItemsToBuildWith on the ProjectInstance. Those collections are what post-build
consumers dereference, so assert them directly at the point where a sweep was
refused. Asserting only IsCached would still pass if the usage guard were ever
reordered after the call that gutted the instance.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b48c6f3f-d2af-474b-b74f-0cbac2330a5e
microsoft-github-policy-service Bot pushed a commit to Azure/bicep that referenced this pull request Oct 26, 2026
Updated
[Azure.Containers.ContainerRegistry](https://github.com/Azure/azure-sdk-for-net)
from 1.3.0 to 1.4.0.

<details>
<summary>Release notes</summary>

_Sourced from [Azure.Containers.ContainerRegistry's
releases](https://github.com/Azure/azure-sdk-for-net/releases)._

## 1.4.0

## 1.4.0 (2026-10-16)

### Bugs Fixed

- Fixed streaming blob downloads to enforce the declared content length
and disallow seeking, ensuring SHA-256 validation
  covers the complete sequential content stream.


Commits viewable in [compare
view](https://github.com/Azure/azure-sdk-for-net/commits/Azure.Containers.ContainerRegistry_1.4.0).
</details>

Updated
[Azure.ResourceManager.Resources](https://github.com/Azure/azure-sdk-for-net)
from 1.11.2 to 1.12.0.

<details>
<summary>Release notes</summary>

_Sourced from [Azure.ResourceManager.Resources's
releases](https://github.com/Azure/azure-sdk-for-net/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/Azure/azure-sdk-for-net/commits).
</details>

Updated [Google.Protobuf](https://github.com/protocolbuffers/protobuf)
from 3.36.1 to 3.36.2.

<details>
<summary>Release notes</summary>

_Sourced from [Google.Protobuf's
releases](https://github.com/protocolbuffers/protobuf/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/protocolbuffers/protobuf/commits).
</details>

Updated [Grpc.AspNetCore.Server](https://github.com/grpc/grpc-dotnet)
from 2.83.0 to 2.84.0.

<details>
<summary>Release notes</summary>

_Sourced from [Grpc.AspNetCore.Server's
releases](https://github.com/grpc/grpc-dotnet/releases)._

## 2.84.0

## What's Changed
* Document complete release version updates by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2748
* Bump axios from 1.16.0 to 1.18.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2745
* Bump fast-uri from 3.1.2 to 3.1.4 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2749
* Avoid blocking SemaphoreSlim.Wait(0) on single-threaded browser WASM
by @​pavelsavara in https://github.com/grpc/grpc-dotnet/pull/2756
* Update package dependencies and examples by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2759
* Bump fast-uri from 3.1.4 to 3.1.5 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2754
* Bump brace-expansion in /testassets/InteropTestsGrpcWebWebsite/Tests
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2755
* Bump ip-address from 10.2.0 to 10.5.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2757
* Stabilize unobserved exception retry test by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2758
* Fix corrupted bytes sent after GOAWAY by @​DeagleGross in
https://github.com/grpc/grpc-dotnet/pull/2766
* Bump fast-uri from 3.1.5 to 3.1.7 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2761
* Bump js-yaml in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2765
* Bump joi from 17.13.4 to 17.13.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2764
* Bump baseline-browser-mapping from 2.9.19 to 2.11.21 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2763
* Bump browserslist from 4.25.1 to 4.28.8 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2762
* Bump @​babel/core from 7.28.0 to 7.29.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2767
* Update the versions for pre release. by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2768
* Update version for 2.84.x-pre1 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2769
* Remove pre suffix for 2.84.0 stable release by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2770

## New Contributors
* @​pavelsavara made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2756
* @​DeagleGross made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2766

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.83.0...v2.84.0

## 2.84.0-pre1

## What's Changed
* Document complete release version updates by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2748
* Bump axios from 1.16.0 to 1.18.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2745
* Bump fast-uri from 3.1.2 to 3.1.4 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2749
* Avoid blocking SemaphoreSlim.Wait(0) on single-threaded browser WASM
by @​pavelsavara in https://github.com/grpc/grpc-dotnet/pull/2756
* Update package dependencies and examples by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2759
* Bump fast-uri from 3.1.4 to 3.1.5 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2754
* Bump brace-expansion in /testassets/InteropTestsGrpcWebWebsite/Tests
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2755
* Bump ip-address from 10.2.0 to 10.5.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2757
* Stabilize unobserved exception retry test by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2758
* Fix corrupted bytes sent after GOAWAY by @​DeagleGross in
https://github.com/grpc/grpc-dotnet/pull/2766
* Bump fast-uri from 3.1.5 to 3.1.7 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2761
* Bump js-yaml in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2765
* Bump joi from 17.13.4 to 17.13.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2764
* Bump baseline-browser-mapping from 2.9.19 to 2.11.21 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2763
* Bump browserslist from 4.25.1 to 4.28.8 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2762
* Bump @​babel/core from 7.28.0 to 7.29.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2767
* Update the versions for pre release. by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2768
* Update version for 2.84.x-pre1 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2769

## New Contributors
* @​pavelsavara made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2756
* @​DeagleGross made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2766

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.83.0...v2.84.0-pre1

Commits viewable in [compare
view](https://github.com/grpc/grpc-dotnet/compare/v2.83.0...v2.84.0).
</details>

Updated
[Grpc.AspNetCore.Server.Reflection](https://github.com/grpc/grpc-dotnet)
from 2.83.0 to 2.84.0.

<details>
<summary>Release notes</summary>

_Sourced from [Grpc.AspNetCore.Server.Reflection's
releases](https://github.com/grpc/grpc-dotnet/releases)._

## 2.84.0

## What's Changed
* Document complete release version updates by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2748
* Bump axios from 1.16.0 to 1.18.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2745
* Bump fast-uri from 3.1.2 to 3.1.4 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2749
* Avoid blocking SemaphoreSlim.Wait(0) on single-threaded browser WASM
by @​pavelsavara in https://github.com/grpc/grpc-dotnet/pull/2756
* Update package dependencies and examples by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2759
* Bump fast-uri from 3.1.4 to 3.1.5 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2754
* Bump brace-expansion in /testassets/InteropTestsGrpcWebWebsite/Tests
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2755
* Bump ip-address from 10.2.0 to 10.5.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2757
* Stabilize unobserved exception retry test by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2758
* Fix corrupted bytes sent after GOAWAY by @​DeagleGross in
https://github.com/grpc/grpc-dotnet/pull/2766
* Bump fast-uri from 3.1.5 to 3.1.7 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2761
* Bump js-yaml in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2765
* Bump joi from 17.13.4 to 17.13.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2764
* Bump baseline-browser-mapping from 2.9.19 to 2.11.21 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2763
* Bump browserslist from 4.25.1 to 4.28.8 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2762
* Bump @​babel/core from 7.28.0 to 7.29.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2767
* Update the versions for pre release. by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2768
* Update version for 2.84.x-pre1 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2769
* Remove pre suffix for 2.84.0 stable release by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2770

## New Contributors
* @​pavelsavara made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2756
* @​DeagleGross made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2766

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.83.0...v2.84.0

## 2.84.0-pre1

## What's Changed
* Document complete release version updates by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2748
* Bump axios from 1.16.0 to 1.18.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2745
* Bump fast-uri from 3.1.2 to 3.1.4 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2749
* Avoid blocking SemaphoreSlim.Wait(0) on single-threaded browser WASM
by @​pavelsavara in https://github.com/grpc/grpc-dotnet/pull/2756
* Update package dependencies and examples by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2759
* Bump fast-uri from 3.1.4 to 3.1.5 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2754
* Bump brace-expansion in /testassets/InteropTestsGrpcWebWebsite/Tests
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2755
* Bump ip-address from 10.2.0 to 10.5.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2757
* Stabilize unobserved exception retry test by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2758
* Fix corrupted bytes sent after GOAWAY by @​DeagleGross in
https://github.com/grpc/grpc-dotnet/pull/2766
* Bump fast-uri from 3.1.5 to 3.1.7 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2761
* Bump js-yaml in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2765
* Bump joi from 17.13.4 to 17.13.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2764
* Bump baseline-browser-mapping from 2.9.19 to 2.11.21 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2763
* Bump browserslist from 4.25.1 to 4.28.8 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2762
* Bump @​babel/core from 7.28.0 to 7.29.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2767
* Update the versions for pre release. by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2768
* Update version for 2.84.x-pre1 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2769

## New Contributors
* @​pavelsavara made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2756
* @​DeagleGross made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2766

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.83.0...v2.84.0-pre1

Commits viewable in [compare
view](https://github.com/grpc/grpc-dotnet/compare/v2.83.0...v2.84.0).
</details>

Updated [Grpc.Net.Client](https://github.com/grpc/grpc-dotnet) from
2.83.0 to 2.84.0.

<details>
<summary>Release notes</summary>

_Sourced from [Grpc.Net.Client's
releases](https://github.com/grpc/grpc-dotnet/releases)._

## 2.84.0

## What's Changed
* Document complete release version updates by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2748
* Bump axios from 1.16.0 to 1.18.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2745
* Bump fast-uri from 3.1.2 to 3.1.4 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2749
* Avoid blocking SemaphoreSlim.Wait(0) on single-threaded browser WASM
by @​pavelsavara in https://github.com/grpc/grpc-dotnet/pull/2756
* Update package dependencies and examples by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2759
* Bump fast-uri from 3.1.4 to 3.1.5 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2754
* Bump brace-expansion in /testassets/InteropTestsGrpcWebWebsite/Tests
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2755
* Bump ip-address from 10.2.0 to 10.5.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2757
* Stabilize unobserved exception retry test by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2758
* Fix corrupted bytes sent after GOAWAY by @​DeagleGross in
https://github.com/grpc/grpc-dotnet/pull/2766
* Bump fast-uri from 3.1.5 to 3.1.7 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2761
* Bump js-yaml in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2765
* Bump joi from 17.13.4 to 17.13.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2764
* Bump baseline-browser-mapping from 2.9.19 to 2.11.21 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2763
* Bump browserslist from 4.25.1 to 4.28.8 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2762
* Bump @​babel/core from 7.28.0 to 7.29.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2767
* Update the versions for pre release. by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2768
* Update version for 2.84.x-pre1 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2769
* Remove pre suffix for 2.84.0 stable release by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2770

## New Contributors
* @​pavelsavara made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2756
* @​DeagleGross made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2766

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.83.0...v2.84.0

## 2.84.0-pre1

## What's Changed
* Document complete release version updates by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2748
* Bump axios from 1.16.0 to 1.18.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2745
* Bump fast-uri from 3.1.2 to 3.1.4 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2749
* Avoid blocking SemaphoreSlim.Wait(0) on single-threaded browser WASM
by @​pavelsavara in https://github.com/grpc/grpc-dotnet/pull/2756
* Update package dependencies and examples by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2759
* Bump fast-uri from 3.1.4 to 3.1.5 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2754
* Bump brace-expansion in /testassets/InteropTestsGrpcWebWebsite/Tests
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2755
* Bump ip-address from 10.2.0 to 10.5.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2757
* Stabilize unobserved exception retry test by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2758
* Fix corrupted bytes sent after GOAWAY by @​DeagleGross in
https://github.com/grpc/grpc-dotnet/pull/2766
* Bump fast-uri from 3.1.5 to 3.1.7 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2761
* Bump js-yaml in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2765
* Bump joi from 17.13.4 to 17.13.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2764
* Bump baseline-browser-mapping from 2.9.19 to 2.11.21 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2763
* Bump browserslist from 4.25.1 to 4.28.8 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2762
* Bump @​babel/core from 7.28.0 to 7.29.7 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2767
* Update the versions for pre release. by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2768
* Update version for 2.84.x-pre1 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2769

## New Contributors
* @​pavelsavara made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2756
* @​DeagleGross made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2766

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.83.0...v2.84.0-pre1

Commits viewable in [compare
view](https://github.com/grpc/grpc-dotnet/compare/v2.83.0...v2.84.0).
</details>

Updated [Grpc.Tools](https://github.com/grpc/grpc) from 2.83.0 to
2.84.0.

<details>
<summary>Release notes</summary>

_Sourced from [Grpc.Tools's
releases](https://github.com/grpc/grpc/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/grpc/grpc/commits).
</details>

Updated [Markdig](https://github.com/xoofx/markdig) from 1.3.2 to 1.5.0.

<details>
<summary>Release notes</summary>

_Sourced from [Markdig's
releases](https://github.com/xoofx/markdig/releases)._

## 1.5.0

# Changes

## 🐛 Bug Fixes

- Keep Unicode whitespace other than spaces and tabs when trimming
paragraphs, headings and info strings (PR #​966) by @​HuzaifaChaudary
- Add relative file links extension (#​897) (PR #​968) by @​StefanGreve
- Don't treat an escaped backslash as the start of another escape in
HtmlHelper.Unescape (PR #​967) by @​HuzaifaChaudary
- Fix unescaped source URL in media links (PR #​969) by @​StefanGreve

**Full Changelog**:
[1.4.2...1.5.0](https://github.com/xoofx/markdig/compare/1.4.2...1.5.0)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


## 1.4.2

# Changes

## ✨ New Features

- Add IsAotCompatible for net8.0 and later targets (PR #​963) by
@​StefanGreve

## 🐛 Bug Fixes

- Fix setext heading line breaks and indented lazy quote lines (PR
#​964) by @​wahidrizka
- Fix setext underlines in block quotes and list items (PR #​965) by
@​wahidrizka
- Fix FindClosestBlock/FindBlockAtPosition with definition groups
(#​677) (PR #​962) by @​ybai08

**Full Changelog**:
[1.4.1...1.4.2](https://github.com/xoofx/markdig/compare/1.4.1...1.4.2)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


## 1.4.1

# Changes

## 🐛 Bug Fixes

- Fix definition list continuation consuming leading markers (PR #​957)
by @​SparkUiX
- Fix grid table open last cell taking a | from the next line (#​494)
(PR #​958) by @​dualfroz
- Fix HTML blocks not ending at a line with only spaces or tabs (PR
#​960) by @​wahidrizka
- Fix empty list items being parsed as text after a paragraph (PR #​961)
by @​wahidrizka
- Fix definition lists requiring 3 spaces after the marker (PR #​959) by
@​dualfroz
- Fix CommonMark HTML block start character classes (d5462ae5)
- Fix CommonMark closing-tag block starts and whitespace (05e638f9)
- Fix empty list items with trailing marker whitespace (2fec2085)
- Fix CommonMark inline HTML declarations (d33c703d)
- Fix definition paragraphs inside tight lists (a998839f)
- Fix concurrent spec generation in parallel builds (ccb9d859)

## 📚 Documentation

- Update doc for definition-list continuation rules (b58e83b4)

**Full Changelog**:
[1.4.0...1.4.1](https://github.com/xoofx/markdig/compare/1.4.0...1.4.1)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


## 1.4.0

# Changes

## ✨ New Features

- Add strict GFM pipe table parsing mode (14cd25c7)

## 🐛 Bug Fixes

- Fix heading auto-link hijacking nested link labels (#​668) (PR #​949)
by @​dualfroz
- Fix: keep trailing content out of an unmatched emphasis closer (#​743)
(PR #​950) by @​dualfroz
- Fix indent on first list item (#​482) (PR #​953) by @​boxofyellow
- Add Normalization Support for PipeTables (GFM) (PR #​954) by
@​boxofyellow
- Fix partially empty pipe table separator regression (PR #​955) by
@​vicancy
- Reject emoji-parsing if the slice ends with `**` (PR #​947) by
@​bstordrup
- Fix strict GFM tables against native cmark-gfm (86866b91)

## 🚀 Enhancements

- Update 3rd party extensions (PR #​945) by @​Kryptos-FR

## 🏭 Tests

- Fix tests warnings (96b024c2)

## 📦 Dependencies

- Bump deps (c6b186b4)

## 🧰 Misc

- Use NuGet Trusted Publishing via dotnet-releaser (56e9c238)

**Full Changelog**:
[1.3.2...1.4.0](https://github.com/xoofx/markdig/compare/1.3.2...1.4.0)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


Commits viewable in [compare
view](https://github.com/xoofx/markdig/compare/1.3.2...1.5.0).
</details>

Updated [Microsoft.Build.Framework](https://github.com/dotnet/msbuild)
from 18.10.1 to 18.11.0.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Build.Framework's
releases](https://github.com/dotnet/msbuild/releases)._

## 18.11.0

## What's Changed
* Add vs18.10 to merge-flow config; retire vs18.7 by @​AlesProkop in
https://github.com/dotnet/msbuild/pull/14563
* Bump main to 18.11.0 after vs18.10 snap by @​AlesProkop in
https://github.com/dotnet/msbuild/pull/14564
* Phase out ChangeWaves 17.10, 17.12, 17.14 and 18.3 by @​JanProvaznik
in https://github.com/dotnet/msbuild/pull/14551
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14572
* Default XML tasks to prohibit DTDs and improve DTD error diagnostics
by @​VolPlita in https://github.com/dotnet/msbuild/pull/14285
* Don't log TaskAssemblyLocationMismatch for task-host-routed tasks by
@​JanProvaznik in https://github.com/dotnet/msbuild/pull/14550
* Scope MSBuild server and coordinator resource names to the current
user by @​JanProvaznik in https://github.com/dotnet/msbuild/pull/14543
* Promote MSBuild server out of Experimental namespace (#​12099) by
@​JanProvaznik in https://github.com/dotnet/msbuild/pull/13964
* Fix builds by adding missing using by @​rainersigwald in
https://github.com/dotnet/msbuild/pull/14587
* Add event-level task telemetry (build/tasks/details) by
@​jankratochvilcz in https://github.com/dotnet/msbuild/pull/13609
* Migrate ResolveCodeAnalysisRuleSet to multithreaded execution by
@​jankratochvilcz in https://github.com/dotnet/msbuild/pull/13636
* Use &lt;inheritdoc /&gt; for TaskEnvironment in
ResolveCodeAnalysisRuleSet by @​jankratochvilcz in
https://github.com/dotnet/msbuild/pull/14589
* Add aliases for configuration and test parameters in build scripts by
@​AR-May in https://github.com/dotnet/msbuild/pull/14591
* [main] Update dependencies from dotnet/arcade by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14617
* Emit assemblyName payload for FallbackAssemblyLoad EventSource events
by @​AR-May in https://github.com/dotnet/msbuild/pull/14014
* Bump github/gh-aw-actions/setup-cli from 0.83.3 to 0.84.1 by
@​dependabot[bot] in https://github.com/dotnet/msbuild/pull/14611
* Bump github/gh-aw-actions/setup from 0.83.3 to 0.84.1 by
@​dependabot[bot] in https://github.com/dotnet/msbuild/pull/14610
* Migrate GetAssembliesMetadata to multithreaded execution by
@​jankratochvilcz in https://github.com/dotnet/msbuild/pull/13637
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14619
* Fix concurrent BuildCheck callback mutation by @​YuliiaKovalova in
https://github.com/dotnet/msbuild/pull/14590
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14612
* Make experimental VS insertion reviewers configurable by
@​rainersigwald in https://github.com/dotnet/msbuild/pull/14632
* Fix NullReferenceException reporting file accesses for detoured nodes
by @​dfederm in https://github.com/dotnet/msbuild/pull/14602
* Scope .NET TaskHost handshake leniency to architecture by
@​JanProvaznik in https://github.com/dotnet/msbuild/pull/14579
* Ensure MSBuild.csproj is included for Release|ARM64 by @​KirillOsenkov
in https://github.com/dotnet/msbuild/pull/14622
* Declare the Sdk element in Microsoft.Build.Core.xsd by @​ViktorHofer
with @​Copilot in https://github.com/dotnet/msbuild/pull/14637
* Call out MSBUILD_LOGGING_ARGS by @​rainersigwald in
https://github.com/dotnet/msbuild/pull/14641
* [Spec] Define MSBuild server child-process ownership by @​JanProvaznik
in https://github.com/dotnet/msbuild/pull/14508
* Pre-buffer TaskHost packet bodies before deserialization by @​AR-May
in https://github.com/dotnet/msbuild/pull/14505
* Expose item glob patterns via MSBuildProvideItemGlobs by @​drewnoakes
in https://github.com/dotnet/msbuild/pull/14389
* Avoid republishing coverage artifacts on CI retries by @​JanProvaznik
in https://github.com/dotnet/msbuild/pull/14423
* Make the resolved change wave part of the node handshake by
@​JanProvaznik with @​Copilot in
https://github.com/dotnet/msbuild/pull/14557
* Bump github/gh-aw-actions/setup from 0.84.1 to 0.86.1 by
@​dependabot[bot] in https://github.com/dotnet/msbuild/pull/14665
* Bump github/gh-aw-actions/setup-cli from 0.84.1 to 0.86.1 by
@​dependabot[bot] in https://github.com/dotnet/msbuild/pull/14664
* [main] Update dependencies from dotnet/arcade by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14672
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14677
* Give each transient MSBuild Server its own identity by @​JanProvaznik
in https://github.com/dotnet/msbuild/pull/14647
* Don't discard the XML cache after restore when it reloads from disk by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/14558
* Add TarDirectory and Untar tasks for creating and extracting tar
archives by @​ViktorHofer with @​Copilot in
https://github.com/dotnet/msbuild/pull/14451
* Add Directory.Parse.config to skip unknown attributes/elements during
parsing by @​benwitmanmsft in
https://github.com/dotnet/msbuild/pull/14588
* Revert branch freeze PowerShell automation by @​AlesProkop in
https://github.com/dotnet/msbuild/pull/14692
* Fix MT switch by @​AR-May in
https://github.com/dotnet/msbuild/pull/14682
* Document multi-request target crosstalk by @​rainersigwald in
https://github.com/dotnet/msbuild/pull/14403
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14698
* Keep project active through post-build telemetry by @​AR-May in
https://github.com/dotnet/msbuild/pull/14679
* Make eng/build.sh portable (don't hardcode /bin/bash) by @​ViktorHofer
in https://github.com/dotnet/msbuild/pull/14707
* [main] Update dependencies from dotnet/arcade by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14709
* Drop stale secret group by @​rainersigwald in
https://github.com/dotnet/msbuild/pull/14710
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14713
 ... (truncated)

Commits viewable in [compare
view](https://github.com/dotnet/msbuild/compare/v18.10.1...v18.11.0).
</details>

Updated Microsoft.Build.Utilities.Core from 18.10.1 to 18.11.0.

Updated
[Microsoft.Extensions.Configuration](https://github.com/dotnet/dotnet)
from 10.0.12 to 10.0.14.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Configuration's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.Configuration.Binder](https://github.com/dotnet/dotnet)
from 10.0.12 to 10.0.14.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Configuration.Binder's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.Configuration.Json](https://github.com/dotnet/dotnet)
from 10.0.12 to 10.0.14.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Configuration.Json's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.DependencyInjection.Abstractions](https://github.com/dotnet/dotnet)
from 10.0.12 to 10.0.14.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.DependencyInjection.Abstractions's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.FileSystemGlobbing](https://github.com/dotnet/dotnet)
from 10.0.12 to 10.0.14.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.FileSystemGlobbing's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated [Microsoft.Extensions.Logging](https://github.com/dotnet/dotnet)
from 10.0.12 to 10.0.14.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Logging's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.NET.Sdk.WebAssembly.Pack](https://github.com/dotnet/dotnet)
from 10.0.12 to 10.0.14.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.NET.Sdk.WebAssembly.Pack's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated [Microsoft.SourceLink.GitHub](https://github.com/dotnet/dotnet)
from 10.0.401 to 10.0.403.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.SourceLink.GitHub's
releases](https://github.com/dotnet/dotnet/releases)._

## 10.0.403

You can build .NET 10.0 from the repository by cloning the release tag
`v10.0.403` and following the build instructions in the [main
README.md](https://github.com/dotnet/dotnet/blob/v10.0.403/README.md#building).

Alternatively, you can build from the sources attached to this release
directly.
More information on this process can be found in the [dotnet/dotnet
repository](https://github.com/dotnet/dotnet/blob/v10.0.403/README.md#building-from-released-sources).

Attached are PGP signatures for the GitHub generated tarball and
zipball. You can find the public key at https://dot.net/release-key-2023

## 10.0.402

You can build .NET 10.0 from the repository by cloning the release tag
`v10.0.402` and following the build instructions in the [main
README.md](https://github.com/dotnet/dotnet/blob/v10.0.402/README.md#building).

Alternatively, you can build from the sources attached to this release
directly.
More information on this process can be found in the [dotnet/dotnet
repository](https://github.com/dotnet/dotnet/blob/v10.0.402/README.md#building-from-released-sources).

Attached are PGP signatures for the GitHub generated tarball and
zipball. You can find the public key at https://dot.net/release-key-2023

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/compare/v10.0.401...v10.0.403).
</details>

Updated
[Microsoft.VisualStudio.Threading](https://github.com/microsoft/vs-threading)
from 18.7.23 to 18.12.1.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.VisualStudio.Threading's
releases](https://github.com/microsoft/vs-threading/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/microsoft/vs-threading/commits).
</details>

Updated
[Microsoft.VisualStudio.Threading.Analyzers](https://github.com/microsoft/vs-threading)
from 18.7.23 to 18.12.1.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.VisualStudio.Threading.Analyzers's
releases](https://github.com/microsoft/vs-threading/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/microsoft/vs-threading/commits).
</details>

Updated
[ModelContextProtocol](https://github.com/modelcontextprotocol/csharp-sdk)
from 2.2.0 to 2.3.0.

<details>
<summary>Release notes</summary>

_Sourced from [ModelContextProtocol's
releases](https://github.com/modelcontextprotocol/csharp-sdk/releases)._

## 2.3.0

This release improves HTTP discovery, OAuth, protocol interoperability,
and shutdown reliability, preserves registration order for server
primitives, and exposes a `TimeProvider` for deterministic client
timeout tests. It also corrects optional server-identity handling;
applications reading `McpClient.ServerInfo` should adopt nullable
handling.

## Breaking Changes

Refer to the [C# SDK
Versioning](https://csharp.sdk.modelcontextprotocol.io/v2/versioning.html)
documentation for details on versioning and breaking change policies.

1. **`McpClient.ServerInfo` is nullable — #​1903**
* Its return annotation changes from `Implementation` to
`Implementation?`. Existing non-nullable assignments or dereferences can
produce nullable warnings and fail warnings-as-errors builds.
* On `2026-07-28` connections, `ServerInfo` is `null` when the server
omits optional identity metadata from `server/discover`. Legacy
`initialize` still requires `serverInfo`. Reading the property before
connecting still throws `InvalidOperationException`.
* Migrate with a null check or a fallback such as
`client.ServerInfo?.Name ?? "Unknown server"`. Self-reported identity
must not be used for security decisions.
* This corrective source-compatibility change is intentionally included
in 2.3.0.

## What's Changed

* Correct protocol-version telemetry for stateless server spans #​1810
by @​luisangelrod
* Preserve HTTP errors and correct discovery fallback handling #​1791 by
@​PranavSenthilnathan (co-authored by @​Copilot)
* Make modern Streamable HTTP status mapping deterministic #​1837 by
@​jstar0
* Modern responses wait for the first protocol message before sending
headers; long-running silent handlers may need progress output or an
appropriate HTTP timeout. Legacy eager-header behavior is preserved.
* Accept opaque legacy metadata and correct request-scoped capabilities
and discovery advertisement #​1852 by @​halter73 (co-authored by
@​Copilot)
* Avoid redundant SSE fallback after discovery is rejected with 400 or
404 #​1855 by @​scottt732
* Close server stdin before waiting for graceful stdio process exit
#​1838 by @​luisangelrod
* Preserve insertion order when listing server tools, prompts, and
resources #​1924 by @​PederHP (co-authored by Claude Opus 5.5)
* Allow missing optional server identity in discovery and make
`ServerInfo` nullable #​1903 by @​Coding-Professional
* Include JSON parse details in Streamable HTTP 400 responses #​1844 by
@​ump45nose
* Exclude OAuth from `DiscoverProbeTimeout`, expose
`McpClientOptions.TimeProvider` for deterministic timeout tests, and
default SSE to legacy initialization #​1719 by @​halter73 (co-authored
by @​Copilot)
* OAuth remains subject to the overall `InitializationTimeout` and
caller cancellation; it is excluded only from the short discovery-probe
budget.
* Modern discovery over SSE requires both explicit
`HttpTransportMode.Sse` and `ProtocolVersion = "2026-07-28"`; pinning
the version with `AutoDetect` is not equivalent.
* Preserve numeric progress tokens in `RequestOptions` serialization
#​1832 by @​dfedoryshchev
* Dispose legacy SSE POST responses to release connections
deterministically #​1841 by @​yalcinfu22 (co-authored by Claude Fable 5)

## Documentation Updates

* Document standing support for new MCP specification revisions #​1826
by @​halter73 (co-authored by @​Copilot)

## Test Improvements

* Stabilize discovery-capable test connections while retaining
initialization deadlines #​1943 by @​tarekgh

## Repository Infrastructure Updates

* Add a source selector for manual documentation publishes #​1828 by
@​jeffhandley (co-authored by @​Copilot)
* Update SourceLink's private build dependency to resolve a vulnerable
Git dependency #​1873 by @​halter73 (co-authored by @​Copilot)
* Correct obsolete `McpServerFactory` references in Copilot instructions
#​1892 by @​Zir0-93
* Update Microsoft.Extensions.AI and AI.Abstractions to 10.11.0 and
align shared System dependencies to 10.0.13 #​1940

## Acknowledgements

* @​scottt732 made their first contribution in #​1855
* @​Zir0-93 made their first contribution in #​1892
* @​Coding-Professional made their first contribution in #​1903
 ... (truncated)

Commits viewable in [compare
view](https://github.com/modelcontextprotocol/csharp-sdk/compare/v2.2.0...v2.3.0).
</details>

Updated [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
from 13.0.3 to 13.0.4.

<details>
<summary>Release notes</summary>

_Sourced from [Newtonsoft.Json's
releases](https://github.com/JamesNK/Newtonsoft.Json/releases)._

## 13.0.4

* New feature - Annotated for trim/AOT (in)compatibility
* New feature - Added support for using Index with JArray
* Change - Avoid LINQ expression trees in .NET 6+ reflection
* Fix - Fixed handling of empty constructor names
* Fix - Fixed XML convert duplicate attribute error on nested arrays
with writeArrayAttribute set to true
* Fix - Fixed XML convert array attribute is not set for properties with
special characters
* Fix - Fixed TimeOnly deserialization to support more formats

Commits viewable in [compare
view](https://github.com/JamesNK/Newtonsoft.Json/compare/13.0.3...13.0.4).
</details>

Updated
[Newtonsoft.Json.Schema](https://github.com/JamesNK/Newtonsoft.Json.Schema)
from 4.0.1 to 4.0.2.

<details>
<summary>Release notes</summary>

_Sourced from [Newtonsoft.Json.Schema's
releases](https://github.com/JamesNK/Newtonsoft.Json.Schema/releases)._

## 4.0.2

* Fix - Fix unevaluated properties with if/then/else
* Fix - Fix validation errors with circular references in child errors
* Fix - Only validate unevaluated scopes when required by the schema

Commits viewable in [compare
view](https://github.com/JamesNK/Newtonsoft.Json.Schema/compare/4.0.1...4.0.2).
</details>

Updated
[OmniSharp.Extensions.LanguageClient](https://github.com/OmniSharp/csharp-language-server-protocol)
from 0.19.9 to 0.19.11.

<details>
<summary>Release notes</summary>

_Sourced from [OmniSharp.Extensions.LanguageClient's
releases](https://github.com/OmniSharp/csharp-language-server-protocol/releases)._

## 0.19.11

## What's Changed
* Revert "Update to Mediatr 14" by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1831
* Fix NuGet package version calculation by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1835
* Publish NuGet packages from a single build by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1836


**Full Changelog**:
https://github.com/OmniSharp/csharp-language-server-protocol/compare/v0.19.10...v0.19.11

## 0.19.10

## What's Changed
* Update verify (major) by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1030
* Update dotnet monorepo by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1031
* Update dependency Microsoft.CodeAnalysis.CSharp.Workspaces to v4.7.0
by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1038
* Update dependency Serilog.Extensions.Logging to v7 by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1040
* Update dependency typescript to v5 by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1042
* Update dependency vscode to v1.82.0 by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1043
* Update dependency glob to v10 by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1047
* Regenerate ci github workflows from Nuke build by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1048
* Add npm to CI build by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1049
* Update verify by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1057
* Use new WorkingDirectory property for RunStep by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1061
* Fix NotebookSelector type by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1077
* Use new HeadlessRunStep by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1074
* Don't log critical message when client disconnect by @​ycholette in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/955
* Update Mediatr to 9.0.0 by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1084
* Add ICapability to ShowMessageRequestClientCapabilities. Fixes #​1117
by @​chrissimon-au in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1118
* Fix github actions badge by @​sh-cho in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1171
* Support net8.0 TFM by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1242
* Bump braces from 3.0.2 to 3.0.3 in /vscode-testextension by
@​dependabot[bot] in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1254
* Update Verify.Xunit to v25 by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1268
* Fix RenameFiles workspace operations by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1079
* Use .NET SDK 9.0 by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1396
* Upgrade MediatR version to 12.4.1 by @​sheffer21 in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1439
* Fix ci publish by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1441
* Update GH Action tool versions by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1446
* Fix FluentAssertions after major update by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1442
* Fix serilog update by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1443
* Fix verify update by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1444
* Update dotnet tools by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1466
* Implement 3.18 features by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1776

## New Contributors
* @​chrissimon-au made their first contribution in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1118
* @​sh-cho made their first contribution in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1171
* @​sheffer21 made their first contribution in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1439

**Full Changelog**:
https://github.com/OmniSharp/csharp-language-server-protocol/compare/v0.19.9...v0.19.10

Commits viewable in [compare
view](https://github.com/OmniSharp/csharp-language-server-protocol/compare/v0.19.9...v0.19.11).
</details>

Updated
[OmniSharp.Extensions.LanguageServer](https://github.com/OmniSharp/csharp-language-server-protocol)
from 0.19.9 to 0.19.11.

<details>
<summary>Release notes</summary>

_Sourced from [OmniSharp.Extensions.LanguageServer's
releases](https://github.com/OmniSharp/csharp-language-server-protocol/releases)._

## 0.19.11

## What's Changed
* Revert "Update to Mediatr 14" by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1831
* Fix NuGet package version calculation by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1835
* Publish NuGet packages from a single build by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1836


**Full Changelog**:
https://github.com/OmniSharp/csharp-language-server-protocol/compare/v0.19.10...v0.19.11

## 0.19.10

## What's Changed
* Update verify (major) by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1030
* Update dotnet monorepo by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1031
* Update dependency Microsoft.CodeAnalysis.CSharp.Workspaces to v4.7.0
by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1038
* Update dependency Serilog.Extensions.Logging to v7 by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1040
* Update dependency typescript to v5 by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1042
* Update dependency vscode to v1.82.0 by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1043
* Update dependency glob to v10 by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1047
* Regenerate ci github workflows from Nuke build by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1048
* Add npm to CI build by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1049
* Update verify by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1057
* Use new WorkingDirectory property for RunStep by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1061
* Fix NotebookSelector type by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1077
* Use new HeadlessRunStep by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1074
* Don't log critical message when client disconnect by @​ycholette in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/955
* Update Mediatr to 9.0.0 by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1084
* Add ICapability to ShowMessageRequestClientCapabilities. Fixes #​1117
by @​chrissimon-au in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1118
* Fix github actions badge by @​sh-cho in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1171
* Support net8.0 TFM by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1242
* Bump braces from 3.0.2 to 3.0.3 in /vscode-testextension by
@​dependabot[bot] in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1254
* Update Verify.Xunit to v25 by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1268
* Fix RenameFiles workspace operations by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1079
* Use .NET SDK 9.0 by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1396
* Upgrade MediatR version to 12.4.1 by @​sheffer21 in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1439
* Fix ci publish by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1441
* Update GH Action tool versions by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1446
* Fix FluentAssertions after major update by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1442
* Fix serilog update by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1443
* Fix verify update by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1444
* Update dotnet tools by @​manandre in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1466
* Implement 3.18 features by @​JoeRobich in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1776

## New Contributors
* @​chrissimon-au made their first contribution in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1118
* @​sh-cho made their first contribution in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1171
* @​sheffer21 made their first contribution in
https://github.com/OmniSharp/csharp-language-server-protocol/pull/1439

**Full Changelog**:
https://github.com/OmniSharp/csharp-language-server-protocol/compare/v0.19.9...v0.19.10

Commits viewable in [compare
view](https://github.com/OmniSharp/csharp-language-server-protocol/compare/v0.19.9...v0.19.11).
</details>

Updated [Sarif.Sdk](https://github.com/Microsoft/sarif-sdk) from 5.7.0
to 5.8.0.

<details>
<summary>Release notes</summary>

_Sourced from [Sarif.Sdk's
releases](https://github.com/Microsoft/sarif-sdk/releases)._

## 5.8.0

## **v5.8.0** [Sdk](https://www.nuget.org/packages/Sarif.Sdk/v5.8.0) |
[Driver](https://www.nuget.org/packages/Sarif.Driver/v5.8.0) |
[Converters](https://www.nuget.org/packages/Sarif.Converters/v5.8.0) |
[Multitool](https://www.nuget.org/packages/Sarif.Multitool/v5.8.0) |
[Multitool
Library](https://www.nuget.org/packages/Sarif.Multitool.Library/v5.8.0)
* NEW: `GHAzDO1021.ProvideValidVersionControlProvenance` rejects a blank
primary branch or revision and the 40-character all-zero Git revision
sentinel.
* BUG: `MultithreadedAnalyzeCommandBase.Run` and `RunAsync` return on
timeout without disposing resources still used by unfinished analysis.
* BUG: `HashUtilities.ComputeHashes` omits hashes for unsupported file
paths so scan-exception notifications can be logged.
* BUG: `SarifLogger` emits hashes supplied by base-less in-memory scan
targets without reading a same-named file from the working directory.
* BUG: `SarifLogger` resolves `uriBaseId` before hashing result
artifacts and omits hashes when their relative locations cannot be
resolved.
* BUG: `analyze --post-uri` reports the endpoint health-check status and
response body or exception when validation fails.

Commits viewable in [compare
view](https://github.com/Microsoft/sarif-sdk/commits/v5.8.0).
</details>

Updated [Scriban](https://github.com/scriban/scriban) from 7.4.0 to
7.5.3.

<details>
<summary>Release notes</summary>

_Sourced from [Scriban's
releases](https://github.com/scriban/scriban/releases)._

## 7.5.3

# Changes

## 🧰 Misc

- Bound stack depth and CPU of postfix chains, array compare, big
integers (6b9c69bf)
- Guard string-producing builtins with LimitToString
(GHSA-95w2-9mjq-6c74) (466aeb2f)

**Full Changelog**:
[7.5.2...7.5.3](https://github.com/scriban/scriban/compare/7.5.2...7.5.3)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


## 7.5.2

# Changes

## 🧰 Misc

- Make function values opaque to template member access (7f481f46)

**Full Changelog**:
[7.5.1...7.5.2](https://github.com/scriban/scriban/compare/7.5.1...7.5.2)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


## 7.5.1

# Changes

## 🧰 Misc

- Support subtracting a timespan from a date (PR #​691) by @​tahakocal

**Full Changelog**:
[7.5.0...7.5.1](https://github.com/scriban/scriban/compare/7.5.0...7.5.1)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


## 7.5.0

# Changes

## 🐛 Bug Fixes

- Fix TestUtcDateNow comparing utc_now against local time (PR #​684) by
@​tahakocal
- Fix string.truncatewords ignoring its ellipsis argument (PR #​687) by
@​tahakocal
- Fix date.parse not matching full month names with %B (PR #​686) by
@​tahakocal
- Fix date.parse_to_string formatting output with the parse pattern
converter (PR #​688) by @​tahakocal
- Fix date.parse with %x and %X combined with other specifiers (PR
#​690) by @​tahakocal
- Fix array.sort failing on numbers of different types (PR #​689) by
@​tahakocal

## 🧰 Misc

- Decouple output and string limits without breaking defaults (#​683)
(e4e1f076)
- Make date parsing documentation timezone-independent (#​685)
(7da8681a)

**Full Changelog**:
[7.4.0...7.5.0](https://github.com/scriban/scriban/compare/7.4.0...7.5.0)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


Commits viewable in [compare
view](https://github.com/scriban/scriban/compare/7.4.0...7.5.3).
</details>

Updated [SharpYaml](https://github.com/xoofx/SharpYaml) from 3.13.1 to
3.16.0.

<details>
<summary>Release notes</summary>

_Sourced from [SharpYaml's
releases](https://github.com/xoofx/SharpYaml/releases)._

## 3.16.0

# Changes

## ✨ New Features

- Add YamlWriter.WriteScalar(value, ScalarStyle) and a global multiline
string style option (PR #​169) by @​Mpdreamz

## 🧰 Misc

- Accept the non-specific tag '!' in the scanner (PR #​171) by
@​Shaisolaris
- Match converters registered for T against lookups for T? (Nullable<T>)
(PR #​170) by @​Mpdreamz

**Full Changelog**:
[3.15.0...3.16.0](https://github.com/xoofx/SharpYaml/compare/3.15.0...3.16.0)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


## 3.15.0

# Changes

## ✨ New Features

- Add global unmapped member callback and finalizer (PR #​165) by
@​Mpdreamz

## 🧰 Misc

- Exempt polymorphic discriminator from unmapped member Disallow
(92525a20)

**Full Changelog**:
[3.14.0...3.15.0](https://github.com/xoofx/SharpYaml/compare/3.14.0...3.15.0)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


## 3.14.0

# Changes

## ✨ New Features

- Add trivia-preserving syntax text edits (#​163) (b8debcdb)

## 🐛 Bug Fixes

- Fix ambiguous string member serialization in generated contexts (PR
#​160) by @​HoMiyabi

## 🧰 Misc

- Update links for serialization and low-level APIs (PR #​161) by
@​mpoettgen
- Clarify merge-key and reference preservation semantics (#​155)
(7648ddb8)
- Use generated readers when populating mutable sequences (#​157)
(d20a18ce)

**Full Changelog**:
[3.13.1...3.14.0](https://github.com/xoofx/SharpYaml/compare/3.13.1...3.14.0)

<sub>Published with
[dotnet-releaser](https://github.com/xoofx/dotnet-releaser/)</sub>


Commits viewable in [compare
view](https://github.com/xoofx/SharpYaml/compare/3.13.1...3.16.0).
</details>

Updated [StreamJsonRpc](https://github.com/microsoft/vs-streamjsonrpc)
from 2.20.20 to 2.26.150.

<details>
<summary>Release notes</summary>

_Sourced from [StreamJsonRpc's
releases](https://github.com/microsoft/vs-streamjsonrpc/releases)._

## 2.26.150

## Fixes
* Fix JSON-RPC 1.0 compliance. #​1522
[@​AArnott](https://github.com/AArnott)
* Accept null JSON-RPC params consistently. #​1506
[@​AArnott](https://github.com/AArnott)
* Preserve exception details across RPC hops. #​1518
[@​AArnott](https://github.com/AArnott)
* Fix typeless async enumerable serialization. #​1521
[@​AArnott](https://github.com/AArnott)
* Fix NativeAOT proxy accessibility and interceptor fallback. #​1472
[@​AArnott](https://github.com/AArnott)
* Avoid repeating async enumerator creation failures. #​1520
[@​AArnott](https://github.com/AArnott)
* Propagate async enumerable cancellation between reads. #​1525
[@​AArnott](https://github.com/AArnott)
* Avoid retaining returned PipeReader channels. #​1528
[@​AArnott](https://github.com/AArnott)
* Ignore disposal methods in RPC ambiguity checks. #​1532
[@​AArnott](https://github.com/AArnott)
* Fix the out-of-band streams documentation title. #​1553
[@​AArnott](https://github.com/AArnott)
* RPC proxies now reject by-reference parameters. #​1507
[@​AArnott](https://github.com/AArnott)

## Enhancements
* Add outbound request timeouts. #​1471
[@​AArnott](https://github.com/AArnott)
* Add parameter-name customization for JSON-RPC. #​1473
[@​AArnott](https://github.com/AArnott)
* Implement async disposal on client proxies. #​1523
[@​AArnott](https://github.com/AArnott)
* Support async enumerable structs in NativeAOT. #​1509
[@​AArnott](https://github.com/AArnott)
* Add an analyzer for ambiguous RPC method overloads. #​1510
[@​AArnott](https://github.com/AArnott)
* Add flexible named-argument matching. #​1540
[@​AArnott](https://github.com/AArnott)
* Add `JsonRpcEventAttribute` for event renaming. #​1519
[@​AArnott](https://github.com/AArnott)
* Support W3C `traceparent` string serialization in MessagePack
formatters. #​1445 [@​AArnott](https://github.com/AArnott)
* Add the `MessagePackFormatter.InternStrings` property. #​1446
[@​AArnott](https://github.com/AArnott)
* Reduce per-call allocations across formatters. #​1559
[@​AArnott](https://github.com/AArnott)
* Optimize the WebSocket receive path on pre-netstandard2.1 targets.
#​1462 [@​AArnott](https://github.com/AArnott)
[@​Copilot](https://github.com/Copilot)
* Reuse Newtonsoft.Json contracts across formatters. #​1527
[@​AArnott](https://github.com/AArnott)
* Defer reflection for cancellation overloads. #​1544
[@​AArnott](https://github.com/AArnott)
* Prefer cancellable RPC overloads. #​1531
[@​AArnott](https://github.com/AArnott)
* Make `RequestIdSTJsonConverter` public for source generation. #​1557
[@​eerhardt](https://github.com/eerhardt)
* Add a working F# RPC sample. #​1508
[@​AArnott](https://github.com/AArnott)
* Document multiple client proxy patterns. #​1470
[@​AArnott](https://github.com/AArnott)
* Document exotic-type wire formats and marshaled method names. #​1554
[@​AArnott](https://github.com/AArnott)

## Dependency updates
* Update MessagePack-CSharp to 2.5.307. #​1571
[@​renovate](https://github.com/renovate)[bot]
* Update Nerdbank.MessagePack to 1.3.88. #​1561
[@​renovate](https://github.com/renovate)[bot]
* Update Newtonsoft.Json to 13.0.4. #​1495
[@​renovate](https://github.com/renovate)[bot]

**Full Changelog**:
https://github.com/microsoft/vs-streamjsonrpc/compare/v2.25.29...v2.26.150

## 2.25.29


## Changes:

* #​1463: Compile analyzers to support .NET 8 SDK

## Fixes

* #​1399: Analyzer in 2.24.84 requires Roslyn 4.14.0, incompatible with
.NET 8 SDK

This list of changes was [auto
generated](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=14379625&view=logs).

## 2.25.28


## Changes:

* #​1459: Bump MessagePack to 2.5.302

This list of changes was [auto
generated](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=14362774&view=logs).

## 2.25.25


## Changes:


### Enhancements:


* #​1395: Add `JsonRpc.DisplayName` property
* #​1404: Move ApplyInboundActivity earlier so dispatch traces have
activity IDs

### Fixes

* #​1420: Avoid RpcMarshalable source-gen local name collisions with
method parameters
* #​1439: Improve docs around using `NerdbankMessagePackFormatter`
* #​1432: Update documentation link for RpcMarshalableAttribute

### Others:


* #​1438: Bump Nerdbank.MessagePack to 1.2.4
* #​1389: Bump Microsoft.AspNetCore packages
* #​1394: Update dependency Microsoft.Bcl.AsyncInterfaces to v10

This list of changes was [auto
generated](https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=14260213&view=logs).</details>

## 2.24.92

## What's Changed

* Bump Nerdbank.MessagePack to 1.1.62 by @​AArnott in
https://github.com/microsoft/vs-streamjsonrpc/pull/1430


**Full Changelog**:
https://github.com/microsoft/vs-streamjsonrpc/compare/v2.24.84...v2.24.92

## 2.24.84

# What's Changed

## Features

* Add source generation of proxies by @​AArnott in
https://github.com/microsoft/vs-streamjsonrpc/pull/1223
* Add NerdbankMessagePackFormatter by @​trippwill in
https://github.com/microsoft/vs-streamjsonrpc/pull/1100
* Enable RPC marshalable objects in `NerdbankMessagePackFormatter` by
@​AArnott in https://github.com/microsoft/vs-streamjsonrpc/pull/1260
* Source generate proxies for RpcMarshalable interfaces by @​AArnott in
https://github.com/microsoft/vs-streamjsonrpc/pull/1246
* Add `RpcTargetMetadata` generation from `ITypeShape` by @​AArnott in
https://github.com/microsoft/vs-streamjsonrpc/pull/1251
* Create a NativeAOT-compatible JsonRpc.AddLocalTargetObject method by
@​AArnott in https://github.com/microsoft/vs-streamjsonrpc/pull/1236
* Use PolyType shapes for events by @​AArnott in
https://github.com/microsoft/vs-streamjsonrpc/pull/1297
* Add `PolyTypeJsonFormatter` as an experimental API by @​AArnott in
https://github.com/microsoft/vs-streamjsonrpc/pull/1344
* Add `RpcTargetMetadata.FromShape<T>` overloads that work on .NET
Framework by @​AArnott in
https://github.com/microsoft/vs-streamjsonrpc/pull/1358
* Expose MessageFormatterEnumerableTracker.EnumeratorResults as public
by @​eerhardt in https://github.com/microsoft/vs-streamjsonrpc/pull/1206

## Fixes

* Remove Dependency on Newtonsoft.Json from JsonRpc by @​eerhardt in
https://github.com/microsoft/vs-streamjsonrpc/pull/1201
* Remove Dependency on Newtonsoft.Json From Protocol objects by
@​eerhardt in https://github.com/microsoft/vs-streamjsonrpc/pull/1198
* Cut ProxyGeneration out if dynamic code isn't supported by @​eerhardt
in https://github.com/microsoft/vs-streamjsonrpc/pull/1202
* Add attributes for NativeAOT safety by @​AArnott in
https://github.com/microsoft/vs-streamjsonrpc/pull/1196
* Refactor code and annotations to fix all warnings in
NativeAOTCompatibility. by @​eerhardt in
https://github.com/microsoft/vs-streamjsonrpc/pull/1207
* Reduce trimming demands for RPC target objects by @​AArnott in
https://github.com/microsoft/vs-streamjsonrpc/pull/1233
* Improve performance of `WebSocketMessageHandler` by @​AArnott in
https://github.com/microsoft/vs-streamjsonrpc/pull/1237
* Cap the amount of text copied into the stringbuilder in
JsonRpcEventSource.Format by @​ToddGrun in
https://github.com/microsoft/vs-streamjsonrpc/pull/1187
* Use JsonElement.Clone instead of Deserialize by @​eerhardt in
https://github.com/…
This was referenced Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants